H2 ডেটাবেস একটি ইন-মেমরি ডেটাবেস, যা সহজ এবং দ্রুত টেস্টিংয়ের জন্য আদর্শ। Spring JDBC এবং H2 ডেটাবেস একসাথে ব্যবহার করে আপনি টেস্টিং প্রক্রিয়া আরও কার্যকর করতে পারেন। এটি সহজেই ইন-মেমরি ডেটাবেস তৈরি করে, যেখানে ডেটা অস্থায়ীভাবে সংরক্ষিত হয় এবং অ্যাপ্লিকেশন বন্ধ হওয়ার সাথে সাথে ডেটা মুছে যায়।
Spring এবং H2 ডেটাবেস ব্যবহার করার জন্য নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependencies>
<!-- Spring JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.21</version>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>test</scope>
</dependency>
<!-- JUnit (Testing Framework) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
</dependencies>
Spring টেস্ট কনফিগারেশন তৈরি করুন, যেখানে H2 ডেটাবেস এবং JdbcTemplate
কনফিগার করবেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
@Configuration
public class TestConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
schema.sql
এবং data.sql
ফাইল তৈরি করুন।
Spring Boot টেস্ট চলাকালীন এই ফাইলগুলো স্বয়ংক্রিয়ভাবে লোড করবে।
schema.sql:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
data.sql:
INSERT INTO employees (id, name, department) VALUES (1, 'John Doe', 'IT');
INSERT INTO employees (id, name, department) VALUES (2, 'Jane Smith', 'HR');
Spring টেস্টিং পরিবেশে H2 ডেটাবেস ব্যবহার করে টেস্টিং করার জন্য JUnit ব্যবহার করুন।
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest(classes = TestConfig.class)
public class EmployeeServiceTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void testFetchEmployees() {
// Fetch all employees
String query = "SELECT * FROM employees";
List<Map<String, Object>> employees = jdbcTemplate.queryForList(query);
// Verify the data
assertEquals(2, employees.size());
assertEquals("John Doe", employees.get(0).get("name"));
assertEquals("Jane Smith", employees.get(1).get("name"));
}
@Test
public void testAddEmployee() {
// Insert a new employee
String insertQuery = "INSERT INTO employees (id, name, department) VALUES (?, ?, ?)";
int rowsAffected = jdbcTemplate.update(insertQuery, 3, "Alice Brown", "Finance");
// Verify the data
assertEquals(1, rowsAffected);
// Fetch and verify
String fetchQuery = "SELECT * FROM employees WHERE id = ?";
Map<String, Object> employee = jdbcTemplate.queryForMap(fetchQuery, 3);
assertEquals("Alice Brown", employee.get("name"));
assertEquals("Finance", employee.get("department"));
}
}
Spring Boot টেস্টিংয়ের সময় schema.sql
এবং data.sql
ফাইলগুলো স্বয়ংক্রিয়ভাবে লোড করা যায়। এটির জন্য কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন নেই।
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
Spring Boot চালু হওয়ার সময় এটি H2 ডেটাবেস সেটআপ করবে এবং SQL স্ক্রিপ্টগুলো লোড করবে।
টেস্ট চলাকালীন H2 ডেটাবেসের ডেটা দেখতে কনসোল ব্যবহার করতে পারেন।
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
H2 কনসোল অ্যাক্সেস করতে ব্রাউজারে যান:
http://localhost:8080/h2-console
ড্রাইভার: org.h2.Driver
জড়ু URL: jdbc:h2:mem:testdb
H2 ডেটাবেস Spring JDBC টেস্টিংয়ের জন্য একটি সহজ, দ্রুত এবং কার্যকর সমাধান। এটি ইন-মেমরি হওয়ায় টেস্টিংয়ের সময় কোনো স্থায়ী ডেটাবেসের প্রয়োজন হয় না। Spring Boot-এর সাহায্যে H2 ইন্টিগ্রেশন আরও সহজ এবং সময়সাশ্রয়ী হয়।
Read more